/**
 * 角色路由表
 * 控制每个角色能访问那些前端路由，便于前端实现路由隐藏
 */
const adminAccessRouter = (sequelize, DataTypes) => {
  const AdminAccessRouter = sequelize.define(
    'adminAccessRouter',
    {
      routers: {
        type: DataTypes.ARRAY({
          type: DataTypes.STRING,
          allowNull: false
        }),
        allowNull: true
      }
    },
    {
      freezeTableName: true, // 自定义表名
      tableName: 'admin_access_router',
      timestamps: true, // 是否需要增加createdAt、updatedAt、deletedAt字段
      underscored: true // 字段使用下划线，而不是驼峰式命名
      // 'paranoid': true // 设置paranoid为true（此种模式下，删除数据时不会进行物理删除，而是设置deletedAt为当前时间
    }
  );

  // 模型关系
  AdminAccessRouter.associate = models => {
    AdminAccessRouter.belongsTo(models.AdminRole, { foreignKey: 'role_id', targetKey: 'id', as: 'role' });
  };

  /**
   * 部门名称查重
   * @param {String} filed 需要被验证的字段
   * @param {String} value 需要被验证的字段的值
   * @param {*} self 去否忽略自己开始验证
   */
  AdminAccessRouter.isRepeat = async (filed, value, self) => {
    const query = {};
    query[filed] = value;
    if (self) {
      const adminAccessRouters = await AdminAccessRouter.findAll({
        where: query,
        attributes: ['id']
      });
      return adminAccessRouters.length >= 2;
    } else {
      return !!(await AdminAccessRouter.findOne({
        where: query,
        attributes: ['id']
      }));
    }
  };

  return AdminAccessRouter;
};

export default adminAccessRouter;
